package main

import (
	"fmt"
)

// 推荐使用驼峰命名 suSt
// 1.函数外的每个语句都必须以关键字开始(var、const、fnc等)
// 2.:-不能使用在函数外。
// 3..多用于占位，表示忽略值,
func main() {
	// 必须先声明再使用
	// 变量》》》》》》》》》》》》》》》》》》》
	// 标准声明变量
	// var 变量名
	var name string
	var age int
	var isok bool
	// 批量声明
	var (
		name1 string
		age1  int
		isok1 bool
	)
	// 初始化
	name = "123"
	age = 16
	isok = false
	fmt.Print(name)                // 直接打印
	fmt.Printf("name:%s/n", age)   // %s 占位符 /n换行
	fmt.Println("name:", isok)     //  换行符
	fmt.Print(isok1)               // 直接打印
	fmt.Printf("name:%s/n", name1) // %s 占位符 /n换行
	fmt.Println("name:", age1)     //  换行符
	// 声明变量同时赋值
	var s1 string = "whb"
	fmt.Println(s1) //根据值类型推导
	var s2 = "20"
	fmt.Println(s2) //根据值类型推导
	// 只能在局部使用
	s3 := "hahaha"
	fmt.Println(s3) //根据值类型推导
	// 常量》》》》》》》》》》》》》》》》》》》》》》
	const pai = 3.1415926
	fmt.Println(pai)
	// 批量声明常量
	const (
		status = 200
		end    = 404
		n1
	)
	// 批量声明常量时，如果某一行声明后没有赋值，默认就和上一行一致
	fmt.Println(status, end, n1)
	// iota
	// iota:类似枚举
	const (
		a1 = iota
		a2
		_
		a3
	)
	fmt.Println(a1, a2, a3)

	// 插队
	const (
		b1 = iota
		b2 = 4
		b3 = iota
	)
	//多个常量声明在一行
	const (
		d1, d2 = iota + 1, iota + 2
		d3, d4 = iota + 1, iota + 2
	)
	// 定义数量级
	const (
		_  = iota
		kb = 1 << (10 * iota) // 左移10位
		MB = 1 << (10 * iota) // 左移10位
		GB = 1 << (10 * iota) // 左移10位
		TB = 1 << (10 * iota) // 左移10位
		PB = 1 << (10 * iota) // 左移10位
	)
}
